package com.ruoyi.common.config;

import com.fasterxml.jackson.databind.module.SimpleModule;
import com.ruoyi.common.enums.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import com.fasterxml.jackson.databind.Module;

@Configuration
public class EnumConfig {

    @Bean
    public Module baseIntegerModule() {
        SimpleModule module = new SimpleModule();
//        module.addSerializer(BaseString.class, new BaseStringSerializer());
//        module.addDeserializer(BaseString.class, new BaseStringDeserializer());
        module.addSerializer(BaseInteger.class, new BaseIntegerSerializer());
        //TODO 实际应无效。实际由IntegerToEnumConverterFactory处理
        module.addDeserializer(BaseInteger.class, new BaseIntegerDeserializer());

        return module;
    }

    @Bean
    public Module baseStringModule() {
        SimpleModule module = new SimpleModule();
        module.addSerializer(BaseString.class, new BaseStringSerializer());
        //TODO 实际应无效。实际由StringToEnumConverterFactory处理
        module.addDeserializer(BaseString.class, new BaseStringDeserializer());
        return module;
    }

    // 用于处理@RequestParam等参数绑定
    @Bean
    public Converter<String, BaseInteger> baseIntegerConverter() {
        return new Converter<String, BaseInteger>() {
            @Override
            public BaseInteger convert(String source) {
                // 这个转换器需要知道具体的枚举类型，所以需要特殊处理
                // 实际使用中可能需要更复杂的逻辑
                throw new UnsupportedOperationException(
                        "请为特定枚举类型注册具体的转换器");
            }
        };
    }

    // 用于处理@RequestParam等参数绑定
    @Bean
    public Converter<String, BaseString> baseStringConverter() {
        return new Converter<String, BaseString>() {
            @Override
            public BaseString convert(String source) {
                // 这个转换器需要知道具体的枚举类型，所以需要特殊处理
                // 实际使用中可能需要更复杂的逻辑
                throw new UnsupportedOperationException(
                        "请为特定枚举类型注册具体的转换器");
            }
        };
    }
}
